#!/usr/bin/env node

const { exec, spawn } = require('child_process');
const path = require('path');

console.log('🛑 正在停止数据监控服务器...\n');

// 方法1: 查找并停止使用server.js的Node进程
function killServerProcesses() {
    return new Promise((resolve) => {
        if (process.platform === 'win32') {
            // Windows系统
            exec('wmic process where "commandline like \'%server.js%\'" get processid /format:list', (error, stdout, stderr) => {
                if (!error && stdout) {
                    const pids = stdout.match(/ProcessId=(\d+)/g);
                    if (pids) {
                        pids.forEach(pidLine => {
                            const pid = pidLine.split('=')[1];
                            if (pid) {
                                console.log(`📋 发现服务器进程 PID: ${pid}`);
                                exec(`taskkill /f /pid ${pid}`, (err) => {
                                    if (!err) {
                                        console.log(`✅ 进程 ${pid} 已停止`);
                                    } else {
                                        console.log(`❌ 停止进程 ${pid} 失败`);
                                    }
                                });
                            }
                        });
                    }
                }
                setTimeout(resolve, 1000);
            });
        } else {
            // Linux/Mac系统
            exec('ps aux | grep "node.*server.js" | grep -v grep', (error, stdout, stderr) => {
                if (!error && stdout) {
                    const lines = stdout.trim().split('\n');
                    lines.forEach(line => {
                        const parts = line.trim().split(/\s+/);
                        if (parts.length > 1) {
                            const pid = parts[1];
                            console.log(`📋 发现服务器进程 PID: ${pid}`);
                            exec(`kill -9 ${pid}`, (err) => {
                                if (!err) {
                                    console.log(`✅ 进程 ${pid} 已停止`);
                                } else {
                                    console.log(`❌ 停止进程 ${pid} 失败`);
                                }
                            });
                        }
                    });
                }
                setTimeout(resolve, 1000);
            });
        }
    });
}

// 方法2: 检查端口3000并停止占用进程
function killPort3000() {
    return new Promise((resolve) => {
        console.log('\n🔍 检查端口3000使用情况...');

        if (process.platform === 'win32') {
            exec('netstat -ano | findstr :3000', (error, stdout, stderr) => {
                if (!error && stdout) {
                    const lines = stdout.trim().split('\n');
                    lines.forEach(line => {
                        const parts = line.trim().split(/\s+/);
                        if (parts.length > 4) {
                            const pid = parts[parts.length - 1];
                            if (pid && pid !== '0') {
                                console.log(`📋 发现占用端口3000的进程 PID: ${pid}`);
                                exec(`taskkill /f /pid ${pid}`, (err) => {
                                    if (!err) {
                                        console.log(`✅ 端口3000进程 ${pid} 已停止`);
                                    } else {
                                        console.log(`❌ 停止端口3000进程 ${pid} 失败`);
                                    }
                                });
                            }
                        }
                    });
                } else {
                    console.log('✅ 端口3000未被占用');
                }
                setTimeout(resolve, 1000);
            });
        } else {
            exec('lsof -ti:3000', (error, stdout, stderr) => {
                if (!error && stdout) {
                    const pids = stdout.trim().split('\n');
                    pids.forEach(pid => {
                        if (pid) {
                            console.log(`📋 发现占用端口3000的进程 PID: ${pid}`);
                            exec(`kill -9 ${pid}`, (err) => {
                                if (!err) {
                                    console.log(`✅ 端口3000进程 ${pid} 已停止`);
                                } else {
                                    console.log(`❌ 停止端口3000进程 ${pid} 失败`);
                                }
                            });
                        }
                    });
                } else {
                    console.log('✅ 端口3000未被占用');
                }
                setTimeout(resolve, 1000);
            });
        }
    });
}

// 执行停止操作
async function stopServers() {
    try {
        await killServerProcesses();
        await killPort3000();

        setTimeout(() => {
            console.log('\n🎉 所有数据监控服务器进程已停止！');
            console.log('💡 端口3000已释放，可以重新启动服务器');
            process.exit(0);
        }, 2000);

    } catch (error) {
        console.error('❌ 停止服务器时出错:', error);
        process.exit(1);
    }
}

stopServers();